' Ball shader
' BASIC Anywhere Machine program
' by ZXDunny 2023
sw=800
sh=480
screen _newimage(sw,sh,24) ' SpecBAS uses this as its default window size
xc=sw/2
yc=sh/2
r=100
amb=0.0125
k=3
mxp=(1-amb)*255
r2=r*r
do
lx=xc-_mousex
ly=yc-_mousey
lz=-75
cls
l=sqr(lx*lx+ly*ly+lz*lz)
nlx=lx/l
nly=ly/l
nlz=lz/l
for x=-r to r
x2=x*x
for y=-r to r
y2=y*y
if x2+y2<=r2 then
v2=sqr(r2-x2-y2)
l=sqr(x2+y2+v2*v2)
v0=x/l
v1=y/l
v2=v2/l
d=nlx*v0+nly*v1+nlz*v2
i=mxp*(iff(d<0,-d^k,0)+amb)
ink=_RGB32(int(i),int(i),int(i))
plot(x+xc,y+yc),ink
end if
next y
next x
_display
loop